Skip to content

Conversation

@radarhere
Copy link
Member

@radarhere radarhere commented Jan 12, 2026

#9389 has pointed out that

from PIL import Image
img = Image.new('RGB', (0, 50))
img.save('test.gif')

raises

Traceback (most recent call last):
  File "demo.py", line 3, in <module>
    img.save('test.gif')
  File "PIL/Image.py", line 2592, in save
    save_handler(self, fp, filename)
  File "PIL/GifImagePlugin.py", line 808, in _save
    _write_single_frame(im, fp, palette)
  File "PIL/GifImagePlugin.py", line 625, in _write_single_frame
    im_out = _normalize_palette(im_out, palette, im.encoderinfo)
  File "PIL/GifImagePlugin.py", line 599, in _normalize_palette
    optimized_palette_colors = _get_optimize(im, info)
  File "PIL/GifImagePlugin.py", line 959, in _get_optimize
    if optimise or max(used_palette_colors) >= len(used_palette_colors):
ValueError: max() arg is an empty sequence

There is also an unexpected error for SPIDER images.

from PIL import Image
img = Image.new('RGB', (0, 50))
img.save('test', 'SPIDER')

raises

Traceback (most recent call last):
  File "demo.py", line 3, in <module>
    im.save('out', 'SPIDER')
  File "PIL/Image.py", line 2592, in save
    save_handler(self, fp, filename)
  File "PIL/SpiderImagePlugin.py", line 296, in _save_spider
    _save(im, fp, filename)
  File "PIL/SpiderImagePlugin.py", line 279, in _save
    hdr = makeSpiderHeader(im)
  File "PIL/SpiderImagePlugin.py", line 248, in makeSpiderHeader
    labrec = int(1024 / lenbyt)
ZeroDivisionError: division by zero

This fixes thse unexpected errors, instead raising

Traceback (most recent call last):
  File "demo.py", line 3, in <module>
    img.save('test.gif')
  File "PIL/Image.py", line 2592, in save
    save_handler(self, fp, filename)
  File "PIL/GifImagePlugin.py", line 808, in _save
    _write_single_frame(im, fp, palette)
  File "PIL/GifImagePlugin.py", line 637, in _write_single_frame
    ImageFile._save(
  File "PIL/ImageFile.py", line 662, in _save
    _encode_tile(im, fp, tile, bufsize, fh)
  File "PIL/ImageFile.py", line 682, in _encode_tile
    encoder.setimage(im.im, extents)
SystemError: tile cannot extend outside image

There is also an unexpected error for PCX images.

from PIL import Image
img = Image.new('RGB', (0, 50))
img.save('test.pcx')

raises

Traceback (most recent call last):
  File "demo.py", line 15, in <module>
    img.save('test.pcx')
  File "PIL/Image.py", line 2592, in save
    save_handler(self, fp, filename)
  File "PIL/PcxImagePlugin.py", line 185, in _save
    + o16(im.size[0] - 1)
  File "PIL/_binary.py", line 100, in o16le
    return pack("<H", i)
struct.error: ushort format requires 0 <= number <= (32767 * 2 + 1)

This adds a new error, similar to JPEG

Traceback (most recent call last):
  File "demo.py", line 15, in <module>
    img.save('test.pcx')
  File "PIL/Image.py", line 2592, in save
    save_handler(self, fp, filename)
  File "PIL/PcxImagePlugin.py", line 151, in _save
    raise ValueError(msg)
ValueError: Cannot write empty image as PCX

@radarhere radarhere added the GIF label Jan 12, 2026
@radarhere radarhere removed the GIF label Jan 12, 2026
@radarhere radarhere changed the title Fix unexpected error when saving zero dimension GIF Fix unexpected error when saving zero dimension GIF and PCX Jan 12, 2026
@radarhere radarhere force-pushed the gif_save branch 2 times, most recently from 876be85 to 4326110 Compare January 12, 2026 21:48
@radarhere radarhere changed the title Fix unexpected error when saving zero dimension GIF and PCX Fix unexpected error when saving zero dimension images Jan 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant